{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {},
   "outputs": [],
   "source": [
    "import pandas as pd\n",
    "import pyarrow.parquet as pq\n",
    "import matplotlib.pyplot as plt\n",
    "\n",
    "file_path = \"../dataset_distilled_from_7b/kk/instruct/5ppl/train.parquet\"\n",
    "# file_path = \"../dataset_distilled_from_7b/kk/instruct/5ppl/val.parquet\""
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {},
   "outputs": [],
   "source": [
    "df = pd.read_parquet(\n",
    "    file_path,\n",
    "    engine=\"pyarrow\"\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>quiz</th>\n",
       "      <th>names</th>\n",
       "      <th>knight_knave</th>\n",
       "      <th>solution</th>\n",
       "      <th>solution_text</th>\n",
       "      <th>solution_text_format</th>\n",
       "      <th>cot_head</th>\n",
       "      <th>cot_repeat_steps</th>\n",
       "      <th>cot_foot</th>\n",
       "      <th>statements</th>\n",
       "      <th>...</th>\n",
       "      <th>ability</th>\n",
       "      <th>reward_model</th>\n",
       "      <th>extra_info</th>\n",
       "      <th>raw_responses</th>\n",
       "      <th>input_ids</th>\n",
       "      <th>attention_mask</th>\n",
       "      <th>position_ids</th>\n",
       "      <th>old_log_probs</th>\n",
       "      <th>reward_score</th>\n",
       "      <th>decoded_responses</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Ella, Zoey, Scarlett, Henry, Amelia]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[True, False, True, True, False]</td>\n",
       "      <td>Ella is a knight, Zoey is a knave, Scarlett is...</td>\n",
       "      <td>(1) Ella is a knight\\n(2) Zoey is a knave\\n(3)...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Ella is a knight. No contradiction is ...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('or', ('telling-truth', 1), ('lying', 1)), (...</td>\n",
       "      <td>...</td>\n",
       "      <td>logic</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 0, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Grace, Abigail, Michael, Chloe, Henry]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[False, True, False, False, True]</td>\n",
       "      <td>Grace is a knave, Abigail is a knight, Michael...</td>\n",
       "      <td>(1) Grace is a knave\\n(2) Abigail is a knight\\...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Grace is a knight. No contradiction is...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('and', ('telling-truth', 2), ('lying', 3)), ...</td>\n",
       "      <td>...</td>\n",
       "      <td>logic</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 1, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Aiden, William, Evelyn, Jackson, Ava]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[False, False, False, True, True]</td>\n",
       "      <td>Aiden is a knave, William is a knave, Evelyn i...</td>\n",
       "      <td>(1) Aiden is a knave\\n(2) William is a knave\\n...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Aiden is a knight. No contradiction is...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('-&gt;', ('lying', 1), ('telling-truth', 2)), (...</td>\n",
       "      <td>...</td>\n",
       "      <td>logic</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 2, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Sofia, Grace, Jackson, Owen, Emily]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[False, False, True, True, True]</td>\n",
       "      <td>Sofia is a knave, Grace is a knave, Jackson is...</td>\n",
       "      <td>(1) Sofia is a knave\\n(2) Grace is a knave\\n(3...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Sofia is a knight. No contradiction is...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('and', ('telling-truth', 2), ('telling-truth...</td>\n",
       "      <td>...</td>\n",
       "      <td>logic</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 3, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Logan, Sebastian, Emily, James, Alexander]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[True, True, True, True, True]</td>\n",
       "      <td>Logan is a knight, Sebastian is a knight, Emil...</td>\n",
       "      <td>(1) Logan is a knight\\n(2) Sebastian is a knig...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Logan is a knight. No contradiction is...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('telling-truth', 0), ('telling-truth', 0), (...</td>\n",
       "      <td>...</td>\n",
       "      <td>logic</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 4, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 23 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                quiz  \\\n",
       "0  A very special island is inhabited only by kni...   \n",
       "1  A very special island is inhabited only by kni...   \n",
       "2  A very special island is inhabited only by kni...   \n",
       "3  A very special island is inhabited only by kni...   \n",
       "4  A very special island is inhabited only by kni...   \n",
       "\n",
       "                                         names  \\\n",
       "0        [Ella, Zoey, Scarlett, Henry, Amelia]   \n",
       "1      [Grace, Abigail, Michael, Chloe, Henry]   \n",
       "2       [Aiden, William, Evelyn, Jackson, Ava]   \n",
       "3         [Sofia, Grace, Jackson, Owen, Emily]   \n",
       "4  [Logan, Sebastian, Emily, James, Alexander]   \n",
       "\n",
       "                                        knight_knave  \\\n",
       "0  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "1  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "2  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "3  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "4  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "\n",
       "                            solution  \\\n",
       "0   [True, False, True, True, False]   \n",
       "1  [False, True, False, False, True]   \n",
       "2  [False, False, False, True, True]   \n",
       "3   [False, False, True, True, True]   \n",
       "4     [True, True, True, True, True]   \n",
       "\n",
       "                                       solution_text  \\\n",
       "0  Ella is a knight, Zoey is a knave, Scarlett is...   \n",
       "1  Grace is a knave, Abigail is a knight, Michael...   \n",
       "2  Aiden is a knave, William is a knave, Evelyn i...   \n",
       "3  Sofia is a knave, Grace is a knave, Jackson is...   \n",
       "4  Logan is a knight, Sebastian is a knight, Emil...   \n",
       "\n",
       "                                solution_text_format  \\\n",
       "0  (1) Ella is a knight\\n(2) Zoey is a knave\\n(3)...   \n",
       "1  (1) Grace is a knave\\n(2) Abigail is a knight\\...   \n",
       "2  (1) Aiden is a knave\\n(2) William is a knave\\n...   \n",
       "3  (1) Sofia is a knave\\n(2) Grace is a knave\\n(3...   \n",
       "4  (1) Logan is a knight\\n(2) Sebastian is a knig...   \n",
       "\n",
       "                                            cot_head  \\\n",
       "0  Let's think step by step, by considering wheth...   \n",
       "1  Let's think step by step, by considering wheth...   \n",
       "2  Let's think step by step, by considering wheth...   \n",
       "3  Let's think step by step, by considering wheth...   \n",
       "4  Let's think step by step, by considering wheth...   \n",
       "\n",
       "                                    cot_repeat_steps  \\\n",
       "0  [Assume Ella is a knight. No contradiction is ...   \n",
       "1  [Assume Grace is a knight. No contradiction is...   \n",
       "2  [Assume Aiden is a knight. No contradiction is...   \n",
       "3  [Assume Sofia is a knight. No contradiction is...   \n",
       "4  [Assume Logan is a knight. No contradiction is...   \n",
       "\n",
       "                             cot_foot  \\\n",
       "0  This leads to a feasible solution.   \n",
       "1  This leads to a feasible solution.   \n",
       "2  This leads to a feasible solution.   \n",
       "3  This leads to a feasible solution.   \n",
       "4  This leads to a feasible solution.   \n",
       "\n",
       "                                          statements  ...  ability  \\\n",
       "0  (('or', ('telling-truth', 1), ('lying', 1)), (...  ...    logic   \n",
       "1  (('and', ('telling-truth', 2), ('lying', 3)), ...  ...    logic   \n",
       "2  (('->', ('lying', 1), ('telling-truth', 2)), (...  ...    logic   \n",
       "3  (('and', ('telling-truth', 2), ('telling-truth...  ...    logic   \n",
       "4  (('telling-truth', 0), ('telling-truth', 0), (...  ...    logic   \n",
       "\n",
       "                                        reward_model  \\\n",
       "0  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "1  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "2  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "3  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "4  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "\n",
       "                                          extra_info  \\\n",
       "0  {'apply_chat_template': True, 'index': 0, 'spl...   \n",
       "1  {'apply_chat_template': True, 'index': 1, 'spl...   \n",
       "2  {'apply_chat_template': True, 'index': 2, 'spl...   \n",
       "3  {'apply_chat_template': True, 'index': 3, 'spl...   \n",
       "4  {'apply_chat_template': True, 'index': 4, 'spl...   \n",
       "\n",
       "                                       raw_responses  \\\n",
       "0  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "1  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "2  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "3  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "4  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "\n",
       "                                           input_ids  \\\n",
       "0  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "1  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "2  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "3  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "4  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "\n",
       "                                      attention_mask  \\\n",
       "0  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "1  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "2  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "3  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "4  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "\n",
       "                                        position_ids  \\\n",
       "0  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "1  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "2  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "3  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "4  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "\n",
       "                                       old_log_probs  \\\n",
       "0  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "1  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "2  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "3  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "4  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "\n",
       "                                        reward_score  \\\n",
       "0  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "1  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "2  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "3  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "4  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "\n",
       "                                   decoded_responses  \n",
       "0  [<think> To solve this, let's analyze each sta...  \n",
       "1  [<think> To solve this, let's analyze each sta...  \n",
       "2  [<think> To solve this, let's analyze each sta...  \n",
       "3  [<think> To solve this, let's analyze each sta...  \n",
       "4  [<think> To solve this, let's analyze each sta...  \n",
       "\n",
       "[5 rows x 23 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(df.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {},
   "outputs": [],
   "source": [
    "df[\"difficulty\"] = df[\"reward_score\"].apply(\n",
    "    # For each list of dicts in \"reward_score\":\n",
    "    lambda lst: sum(\n",
    "        d[\"extra_info\"][\"outcome_score\"] for d in lst  # Sum all \"outcome_score\" values\n",
    "    )\n",
    ")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>quiz</th>\n",
       "      <th>names</th>\n",
       "      <th>knight_knave</th>\n",
       "      <th>solution</th>\n",
       "      <th>solution_text</th>\n",
       "      <th>solution_text_format</th>\n",
       "      <th>cot_head</th>\n",
       "      <th>cot_repeat_steps</th>\n",
       "      <th>cot_foot</th>\n",
       "      <th>statements</th>\n",
       "      <th>...</th>\n",
       "      <th>reward_model</th>\n",
       "      <th>extra_info</th>\n",
       "      <th>raw_responses</th>\n",
       "      <th>input_ids</th>\n",
       "      <th>attention_mask</th>\n",
       "      <th>position_ids</th>\n",
       "      <th>old_log_probs</th>\n",
       "      <th>reward_score</th>\n",
       "      <th>decoded_responses</th>\n",
       "      <th>difficulty</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Ella, Zoey, Scarlett, Henry, Amelia]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[True, False, True, True, False]</td>\n",
       "      <td>Ella is a knight, Zoey is a knave, Scarlett is...</td>\n",
       "      <td>(1) Ella is a knight\\n(2) Zoey is a knave\\n(3)...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Ella is a knight. No contradiction is ...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('or', ('telling-truth', 1), ('lying', 1)), (...</td>\n",
       "      <td>...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 0, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Grace, Abigail, Michael, Chloe, Henry]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[False, True, False, False, True]</td>\n",
       "      <td>Grace is a knave, Abigail is a knight, Michael...</td>\n",
       "      <td>(1) Grace is a knave\\n(2) Abigail is a knight\\...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Grace is a knight. No contradiction is...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('and', ('telling-truth', 2), ('lying', 3)), ...</td>\n",
       "      <td>...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 1, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Aiden, William, Evelyn, Jackson, Ava]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[False, False, False, True, True]</td>\n",
       "      <td>Aiden is a knave, William is a knave, Evelyn i...</td>\n",
       "      <td>(1) Aiden is a knave\\n(2) William is a knave\\n...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Aiden is a knight. No contradiction is...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('-&gt;', ('lying', 1), ('telling-truth', 2)), (...</td>\n",
       "      <td>...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 2, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Sofia, Grace, Jackson, Owen, Emily]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[False, False, True, True, True]</td>\n",
       "      <td>Sofia is a knave, Grace is a knave, Jackson is...</td>\n",
       "      <td>(1) Sofia is a knave\\n(2) Grace is a knave\\n(3...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Sofia is a knight. No contradiction is...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('and', ('telling-truth', 2), ('telling-truth...</td>\n",
       "      <td>...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 3, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>A very special island is inhabited only by kni...</td>\n",
       "      <td>[Logan, Sebastian, Emily, James, Alexander]</td>\n",
       "      <td>{'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...</td>\n",
       "      <td>[True, True, True, True, True]</td>\n",
       "      <td>Logan is a knight, Sebastian is a knight, Emil...</td>\n",
       "      <td>(1) Logan is a knight\\n(2) Sebastian is a knig...</td>\n",
       "      <td>Let's think step by step, by considering wheth...</td>\n",
       "      <td>[Assume Logan is a knight. No contradiction is...</td>\n",
       "      <td>This leads to a feasible solution.</td>\n",
       "      <td>(('telling-truth', 0), ('telling-truth', 0), (...</td>\n",
       "      <td>...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>{'apply_chat_template': True, 'index': 4, 'spl...</td>\n",
       "      <td>[[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...</td>\n",
       "      <td>[[151643, 151643, 151643, 151643, 151643, 1516...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...</td>\n",
       "      <td>[[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...</td>\n",
       "      <td>[{'extra_info': {'format_score': 1, 'outcome_s...</td>\n",
       "      <td>[&lt;think&gt; To solve this, let's analyze each sta...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>5 rows × 24 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                                                quiz  \\\n",
       "0  A very special island is inhabited only by kni...   \n",
       "1  A very special island is inhabited only by kni...   \n",
       "2  A very special island is inhabited only by kni...   \n",
       "3  A very special island is inhabited only by kni...   \n",
       "4  A very special island is inhabited only by kni...   \n",
       "\n",
       "                                         names  \\\n",
       "0        [Ella, Zoey, Scarlett, Henry, Amelia]   \n",
       "1      [Grace, Abigail, Michael, Chloe, Henry]   \n",
       "2       [Aiden, William, Evelyn, Jackson, Ava]   \n",
       "3         [Sofia, Grace, Jackson, Owen, Emily]   \n",
       "4  [Logan, Sebastian, Emily, James, Alexander]   \n",
       "\n",
       "                                        knight_knave  \\\n",
       "0  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "1  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "2  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "3  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "4  {'Knave': 'Knave', 'Knight': 'Knight', 'a_knav...   \n",
       "\n",
       "                            solution  \\\n",
       "0   [True, False, True, True, False]   \n",
       "1  [False, True, False, False, True]   \n",
       "2  [False, False, False, True, True]   \n",
       "3   [False, False, True, True, True]   \n",
       "4     [True, True, True, True, True]   \n",
       "\n",
       "                                       solution_text  \\\n",
       "0  Ella is a knight, Zoey is a knave, Scarlett is...   \n",
       "1  Grace is a knave, Abigail is a knight, Michael...   \n",
       "2  Aiden is a knave, William is a knave, Evelyn i...   \n",
       "3  Sofia is a knave, Grace is a knave, Jackson is...   \n",
       "4  Logan is a knight, Sebastian is a knight, Emil...   \n",
       "\n",
       "                                solution_text_format  \\\n",
       "0  (1) Ella is a knight\\n(2) Zoey is a knave\\n(3)...   \n",
       "1  (1) Grace is a knave\\n(2) Abigail is a knight\\...   \n",
       "2  (1) Aiden is a knave\\n(2) William is a knave\\n...   \n",
       "3  (1) Sofia is a knave\\n(2) Grace is a knave\\n(3...   \n",
       "4  (1) Logan is a knight\\n(2) Sebastian is a knig...   \n",
       "\n",
       "                                            cot_head  \\\n",
       "0  Let's think step by step, by considering wheth...   \n",
       "1  Let's think step by step, by considering wheth...   \n",
       "2  Let's think step by step, by considering wheth...   \n",
       "3  Let's think step by step, by considering wheth...   \n",
       "4  Let's think step by step, by considering wheth...   \n",
       "\n",
       "                                    cot_repeat_steps  \\\n",
       "0  [Assume Ella is a knight. No contradiction is ...   \n",
       "1  [Assume Grace is a knight. No contradiction is...   \n",
       "2  [Assume Aiden is a knight. No contradiction is...   \n",
       "3  [Assume Sofia is a knight. No contradiction is...   \n",
       "4  [Assume Logan is a knight. No contradiction is...   \n",
       "\n",
       "                             cot_foot  \\\n",
       "0  This leads to a feasible solution.   \n",
       "1  This leads to a feasible solution.   \n",
       "2  This leads to a feasible solution.   \n",
       "3  This leads to a feasible solution.   \n",
       "4  This leads to a feasible solution.   \n",
       "\n",
       "                                          statements  ...  \\\n",
       "0  (('or', ('telling-truth', 1), ('lying', 1)), (...  ...   \n",
       "1  (('and', ('telling-truth', 2), ('lying', 3)), ...  ...   \n",
       "2  (('->', ('lying', 1), ('telling-truth', 2)), (...  ...   \n",
       "3  (('and', ('telling-truth', 2), ('telling-truth...  ...   \n",
       "4  (('telling-truth', 0), ('telling-truth', 0), (...  ...   \n",
       "\n",
       "                                        reward_model  \\\n",
       "0  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "1  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "2  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "3  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "4  {'ground_truth': {'solution_text_format': '(1)...   \n",
       "\n",
       "                                          extra_info  \\\n",
       "0  {'apply_chat_template': True, 'index': 0, 'spl...   \n",
       "1  {'apply_chat_template': True, 'index': 1, 'spl...   \n",
       "2  {'apply_chat_template': True, 'index': 2, 'spl...   \n",
       "3  {'apply_chat_template': True, 'index': 3, 'spl...   \n",
       "4  {'apply_chat_template': True, 'index': 4, 'spl...   \n",
       "\n",
       "                                       raw_responses  \\\n",
       "0  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "1  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "2  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "3  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "4  [[27, 26865, 29, 2014, 11625, 419, 11, 1077, 5...   \n",
       "\n",
       "                                           input_ids  \\\n",
       "0  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "1  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "2  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "3  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "4  [[151643, 151643, 151643, 151643, 151643, 1516...   \n",
       "\n",
       "                                      attention_mask  \\\n",
       "0  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "1  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "2  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "3  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "4  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "\n",
       "                                        position_ids  \\\n",
       "0  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "1  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "2  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "3  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "4  [[0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,...   \n",
       "\n",
       "                                       old_log_probs  \\\n",
       "0  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "1  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "2  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "3  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "4  [[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0,...   \n",
       "\n",
       "                                        reward_score  \\\n",
       "0  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "1  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "2  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "3  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "4  [{'extra_info': {'format_score': 1, 'outcome_s...   \n",
       "\n",
       "                                   decoded_responses difficulty  \n",
       "0  [<think> To solve this, let's analyze each sta...          5  \n",
       "1  [<think> To solve this, let's analyze each sta...          5  \n",
       "2  [<think> To solve this, let's analyze each sta...          5  \n",
       "3  [<think> To solve this, let's analyze each sta...          5  \n",
       "4  [<think> To solve this, let's analyze each sta...          5  \n",
       "\n",
       "[5 rows x 24 columns]"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(df.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {},
   "outputs": [],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "import seaborn as sns"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAA04AAAIjCAYAAAA0vUuxAAAAOnRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjEwLjEsIGh0dHBzOi8vbWF0cGxvdGxpYi5vcmcvc2/+5QAAAAlwSFlzAAAPYQAAD2EBqD+naQAAXpFJREFUeJzt3XlYlPX+//HXPSCMC6bGpkZg7ruG6VHrmGXHzEw7LWYlSmorZVGdok6SWVmnUutkWR2Xss3s2/Zr0Qy1TC0Lt9x3KQTELEEMEObz+8PjHCfAG3DGGfH5uK65Luczn3vu9/2eO/Llfc8HyxhjBAAAAACokMPfBQAAAABAoCM4AQAAAIANghMAAAAA2CA4AQAAAIANghMAAAAA2CA4AQAAAIANghMAAAAA2CA4AQAAAIANghMAAAAA2CA4AUAVPfroo7Is66Ts68ILL9SFF17ofr548WJZlqX333//pOx/5MiRiouLOyn7qq6DBw9q9OjRio6OlmVZuvvuu736/pZl6dFHH/UY++GHH9SrVy/VrVtXlmVp9erVkqR58+apS5cucjqdsixLv//+u897OGvWLFmWpV27dvlsHwAAghOA09zRv3QefTidTjVp0kT9+/fXCy+8oPz8fK/sZ8+ePXr00Ufdf8EOJIFcW2U8+eSTmjVrlm677TbNnj1bw4cPr3BuXFyc+7N2OBxq0KCBOnbsqJtvvlnff/99pfZ3+PBhXXPNNdq/f78mT56s2bNnKzY2Vr/++quuvfZa1a5dW1OnTtXs2bNVt25dbx1mlbz00kuaNWuW1983NzdXY8eOVZs2bVS7dm1FRkaqe/fueuCBB3Tw4EGv7w8AAolljDH+LgIA/GXWrFlKTEzUY489pmbNmunw4cPKzs7W4sWLtWDBAp199tn65JNP1KlTJ/c2JSUlKikpkdPprPR+fvzxR5133nmaOXOmRo4cWentiouLJUkhISGSjlxx6tu3r+bOnaurr7660u9T3doOHz4sl8ul0NBQr+zLF/7yl78oODhY3377re3cuLg4NWzYUPfee68kKT8/Xxs3btTcuXOVnZ2te+65R5MmTfLYprCwUMHBwQoODpYkbdq0SW3bttVrr72m0aNHu+fNmzdPAwYM0IIFC9SvXz/3uK97ePQc3rlzp/vKVocOHRQeHq7Fixd7bT/79+9X165dlZeXp5tuuklt2rTRr7/+qrVr1+rTTz/V2rVrA/7qJACciGB/FwAAgWDAgAHq1q2b+3lKSooWLlyoyy+/XFdccYU2btyo2rVrS5LHX6J95dChQ6pTp447MPlLrVq1/Lr/yti7d6/atWtX6flNmzbVjTfe6DH29NNP6/rrr9fkyZPVsmVL3Xbbbe7X/hyQ9+7dK0lq0KBBpcZPhR5WxvTp05WRkaGlS5eqV69eHq/l5eWd1HO1oKDAb1fzAJy+uFUPACpw0UUX6ZFHHtHu3bv15ptvusfL+47TggULdP7556tBgwaqV6+eWrdurYceekjSkatE5513niQpMTHRfavY0VupLrzwQnXo0EHp6en661//qjp16ri3/fN3nI4qLS3VQw89pOjoaNWtW1dXXHGFfv75Z485cXFx5V7dOvY97Wor7/s5BQUFuvfeexUTE6PQ0FC1bt1azz77rP58A4NlWUpKStJHH32kDh06KDQ0VO3bt9e8efPKb/if7N27V6NGjVJUVJScTqc6d+6s119/3f360e977dy5U5999pm79up816d27dqaPXu2GjVqpCeeeMLjWI79jtPIkSPVp08fSdI111wjy7Lc/RwxYoQk6bzzzpNlWe7el9dDl8ul559/Xh07dpTT6VRERIQuvfRS/fjjj5KkXbt2eXwOxyrvO1fHiouL0/r16/X111+7e3LhhRdqx44dsixLkydPLrPNsmXLZFmW3nnnnQrfd/v27QoKCtJf/vKXMq/Vr1+/TMD8/vvvddlll6lhw4aqW7euOnXqpOeff95jzsKFC3XBBReobt26atCggQYPHqyNGzd6zDn639uGDRt0/fXXq2HDhjr//PPdr7/55puKj49X7dq11ahRI1133XVl/lvYunWrrrrqKkVHR8vpdOqss87SddddpwMHDlR4vADwZ1xxAoDjGD58uB566CF9+eWXGjNmTLlz1q9fr8svv1ydOnXSY489ptDQUG3btk1Lly6VJLVt21aPPfaYxo0bp5tvvlkXXHCBJHn8q/2vv/6qAQMG6LrrrtONN96oqKio49b1xBNPyLIsPfDAA9q7d6+mTJmifv36afXq1e4rY5VRmdqOZYzRFVdcoUWLFmnUqFHq0qWL5s+fr/vvv1+ZmZll/lL+7bff6oMPPtDtt9+usLAwvfDCC7rqqquUkZGhM888s8K6/vjjD1144YXatm2bkpKS1KxZM82dO1cjR47U77//rrFjx6pt27aaPXu27rnnHp111lnu2+8iIiIqffzHqlevnq688kpNnz5dGzZsUPv27cvMueWWW9S0aVM9+eSTuuuuu3Teeee5P6vWrVvr1Vdfdd/22bx58wr3NWrUKM2aNUsDBgzQ6NGjVVJSoiVLlui7777zuPJZHVOmTNGdd96pevXq6eGHH5YkRUVF6ZxzzlHv3r311ltv6Z577vHY5q233lJYWJgGDx5c4fvGxsaqtLRUs2fPdofEiixYsECXX365GjdurLFjxyo6OlobN27Up59+qrFjx0qSvvrqKw0YMEDnnHOOHn30Uf3xxx/697//rd69e2vlypVlwuY111yjli1b6sknn3QH2yeeeEKPPPKIrr32Wo0ePVq5ubn697//rb/+9a9atWqVGjRooOLiYvXv319FRUW68847FR0drczMTH366af6/fffdcYZZ1S1xQBOVwYATmMzZ840kswPP/xQ4ZwzzjjDdO3a1f08NTXVHPvjc/LkyUaSyc3NrfA9fvjhByPJzJw5s8xrffr0MZLMtGnTyn2tT58+7ueLFi0ykkzTpk1NXl6ee/y9994zkszzzz/vHouNjTUjRoywfc/j1TZixAgTGxvrfv7RRx8ZSebxxx/3mHf11Vcby7LMtm3b3GOSTEhIiMfYmjVrjCTz73//u8y+jjVlyhQjybz55pvuseLiYtOzZ09Tr149j2OPjY01AwcOPO77VXbu0c/y448/9jiO1NRU9/Ojn8HcuXM9tq3oXPpzDxcuXGgkmbvuuqvM/l0ulzHGmJ07d1b4mfy5nqP73blzp3usffv2Hp/xUa+88oqRZDZu3OgeKy4uNuHh4eWeK8fKzs42ERERRpJp06aNufXWW83bb79tfv/9d495JSUlplmzZiY2Ntb89ttv5R6fMcZ06dLFREZGml9//dU9tmbNGuNwOExCQoJ77Oh/b8OGDfN4r127dpmgoCDzxBNPeIz/9NNPJjg42D2+atWqcj8vAKgqbtUDABv16tU77up6R7/T8vHHH8vlclVrH6GhoUpMTKz0/ISEBIWFhbmfX3311WrcuLE+//zzau2/sj7//HMFBQXprrvu8hi/9957ZYzRF1984THer18/jysvnTp1Uv369bVjxw7b/URHR2vYsGHusVq1aumuu+7SwYMH9fXXX3vhaMqqV6+eJHltNcXy/N///Z8sy1JqamqZ13y9zP21114rp9Opt956yz02f/587du3r8z3vv4sKipKa9as0a233qrffvtN06ZN0/XXX6/IyEhNmDDBfRVo1apV2rlzp+6+++4y3/c6enxZWVlavXq1Ro4cqUaNGrlf79Spky655JJyz+Nbb73V4/kHH3wgl8ula6+9Vvv27XM/oqOj1bJlSy1atEiS3FeU5s+fr0OHDlWyUwBQFsEJAGwcPHjQI6T82dChQ9W7d2+NHj1aUVFRuu666/Tee+9VKUQ1bdq0Sl+ub9mypcdzy7LUokULn/8un927d6tJkyZl+tG2bVv368c6++yzy7xHw4YN9dtvv9nup2XLlnI4PP83VdF+vOXoktrH+7xP1Pbt29WkSROPwHCyNGjQQIMGDdLbb7/tHnvrrbfUtGlTXXTRRbbbN27cWC+//LKysrK0efNmvfDCC4qIiNC4ceM0ffp0SUeOTzqysl9Fjn5+rVu3LvNa27ZttW/fPhUUFHiMN2vWzOP51q1bZYxRy5YtFRER4fHYuHGje7GOZs2aKTk5Wf/5z38UHh6u/v37a+rUqXy/CUCVEZwA4Dh++eUXHThwQC1atKhwTu3atfXNN9/oq6++0vDhw7V27VoNHTpUl1xyiUpLSyu1n6p8L6myKrp6UdmavCEoKKjccROgvwlj3bp1knTcz/tk8OVnl5CQoB07dmjZsmXKz8/XJ598omHDhpUJqXb1tWrVSnfeeae++eYbORwOj6tYvvDn/0ZcLpcsy9K8efO0YMGCMo9XXnnFPfe5557T2rVr9dBDD+mPP/7QXXfdpfbt2+uXX37xac0AahaCEwAcx+zZsyVJ/fv3P+48h8Ohiy++WJMmTdKGDRv0xBNPaOHChe7bhbx9C9bWrVs9nhtjtG3bNo8v1Dds2FC///57mW3/fLWmKrXFxsZqz549ZW5l27Rpk/t1b4iNjdXWrVvLXLXz9n6OdfDgQX344YeKiYlxX9nyhebNm2vPnj3av39/hXMaNmwoSWU+v8peaTveZ3rppZcqIiJCb731lj788EMdOnTouL802M4555yjhg0bKisrS5Lct2YeDaHlOfr5bd68ucxrmzZtUnh4uO1y482bN5cxRs2aNVO/fv3KPP68+l/Hjh31z3/+U998842WLFmizMxMTZs2rUrHCuD0RnACgAosXLhQEyZMULNmzXTDDTdUOK+8vwB36dJFklRUVCRJ7r8ElhdkquONN97wCC/vv/++srKyNGDAAPdY8+bN9d1337l/ia4kffrpp2WWaq5KbZdddplKS0v14osveoxPnjxZlmV57P9EXHbZZcrOztacOXPcYyUlJfr3v/+tevXquZcE95Y//vhDw4cP1/79+/Xwww/79LtGV111lYwxGj9+fJnXjl6Jq1+/vsLDw/XNN994vP7SSy9Vah9169at8PMMDg7WsGHD9N5772nWrFnq2LGjxy94rsj3339f5vY5SVqxYoV+/fVX92135557rpo1a6YpU6aUqeHo8TVu3FhdunTR66+/7jFn3bp1+vLLL3XZZZfZ1vP3v/9dQUFBGj9+fJkrmMYY/frrr5KO/I6pkpISj9c7duwoh8Ph/u8TACqD5cgBQNIXX3yhTZs2qaSkRDk5OVq4cKEWLFig2NhYffLJJ2V+R82xHnvsMX3zzTcaOHCgYmNjtXfvXr300ks666yz3L9vpnnz5mrQoIGmTZumsLAw1a1bVz169CjzvY3KatSokc4//3wlJiYqJydHU6ZMUYsWLTyWTB89erTef/99XXrppbr22mu1fft2vfnmm2WWya5KbYMGDVLfvn318MMPa9euXercubO+/PJLffzxx7r77ruPuwR3Vdx888165ZVXNHLkSKWnpysuLk7vv/++li5dqilTppzQd5AyMzPdv5fr4MGD2rBhg+bOnavs7Gzde++9uuWWW7xyDBXp27evhg8frhdeeEFbt27VpZdeKpfLpSVLlqhv375KSkqSdOTze+qppzR69Gh169ZN33zzjbZs2VKpfcTHx+vll1/W448/rhYtWigyMtLjO0wJCQl64YUXtGjRIj399NOVes/Zs2frrbfe0pVXXqn4+HiFhIRo48aNmjFjhpxOp/t3jzkcDr388ssaNGiQunTposTERDVu3FibNm3S+vXrNX/+fEnSM888owEDBqhnz54aNWqUeznyM84447i/p+qo5s2b6/HHH1dKSop27dqlIUOGKCwsTDt37tSHH36om2++Wffdd58WLlyopKQkXXPNNWrVqpVKSko0e/ZsBQUF6aqrrqrUsQOAJJYjB3B6O7qU89FHSEiIiY6ONpdccol5/vnnPZa9PurPy5GnpaWZwYMHmyZNmpiQkBDTpEkT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qPHjx5cZz83NVWFhYdWL9jKXy6UDBw4c80MH3kR/fYv++hb99S3661v017cCqb+FhYWKj49XmEoUdHC/X2vxGmPkKMw/8mfL8m8tNVCYStSiRQsVFhZW+PWckyU/P7/Sc/0anE7U9OnT1bFjR3Xv3r3COSkpKUpOTnY/z8vLU0xMjCIiIlS/fv2TUeZxuVwuWZaliIgIv//gq4nor2/RX9+iv75Ff32L/vpWIPU3MzNT6enpGqxghddr5NdavMYYSVJpvUYEJx/IV4a2bdsmp9OpyMhIv9bidDorPdevwSk8PFxBQUHKycnxGM/JyVF0dPRxty0oKNC7776rxx577LjzQkNDFRoaWmbc4XD4/QfNUZZlBVQ9NQ399S3661v017for2/RX98KlP5alvXf250syaopn7XrSGCyatIxBZIjt+kdPYf9qSr792ulISEhio+PV1pamnvM5XIpLS1NPXv2PO62c+fOVVFRkW688UZflwkAAADgNOf3W/WSk5M1YsQIdevWTd27d9eUKVNUUFCgxMRESVJCQoKaNm2qiRMnemw3ffp0DRkyRGeeeaY/ygYAAABwGvF7cBo6dKhyc3M1btw4ZWdnq0uXLpo3b557wYiMjIwyl9A2b96sb7/9Vl9++aU/SgYAAABwmvF7cJKkpKQkJSUllfva4sWLy4y1bt1a5r9f2gMAAAAAX+PbbgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgw+/BaerUqYqLi5PT6VSPHj20YsWK487//fffdccdd6hx48YKDQ1Vq1at9Pnnn5+kagEAAACcjoL9ufM5c+YoOTlZ06ZNU48ePTRlyhT1799fmzdvVmRkZJn5xcXFuuSSSxQZGan3339fTZs21e7du9WgQYOTXzwAAACA04Zfg9OkSZM0ZswYJSYmSpKmTZumzz77TDNmzNCDDz5YZv6MGTO0f/9+LVu2TLVq1ZIkxcXFncySAQAAAJyG/BaciouLlZ6erpSUFPeYw+FQv379tHz58nK3+eSTT9SzZ0/dcccd+vjjjxUREaHrr79eDzzwgIKCgsrdpqioSEVFRe7neXl5kiSXyyWXy+XFI6oel8slY0xA1FIT0V/for++RX99i/76Fv31rUDqrzFGDodDkpGM/+vxCmP+91ANOaaAYmRZVkCcw1XZv9+C0759+1RaWqqoqCiP8aioKG3atKncbXbs2KGFCxfqhhtu0Oeff65t27bp9ttv1+HDh5WamlruNhMnTtT48ePLjOfm5qqwsPDED+QEuVwuHThw4JgfOvAm+utb9Ne36K9v0V/for++FUj9LSwsVHx8vMJUoqCD+/1ai9cYI0dh/pE/W5Z/a6mBwlSiFi1aqLCwUHv37vVrLfn5+ZWe69db9arK5XIpMjJSr776qoKCghQfH6/MzEw988wzFQanlJQUJScnu5/n5eUpJiZGERERql+//skqvUIul0uWZSkiIsLvP/hqIvrrW/TXt+ivb9Ff36K/vhVI/c3MzFR6eroGK1jh9Rr5tRavMUaSVFqvEcHJB/KVoW3btsnpdJa7rsHJ5HQ6Kz3Xb8EpPDxcQUFBysnJ8RjPyclRdHR0uds0btxYtWrV8rgtr23btsrOzlZxcbFCQkLKbBMaGqrQ0NAy4w6Hw+8/aI6yLCug6qlp6K9v0V/for++RX99i/76VqD017Ks/97uZElWTfmsXUcCk1WTjimQHLlN7+g57E9V2b/fKg0JCVF8fLzS0tLcYy6XS2lpaerZs2e52/Tu3Vvbtm3zuBdxy5Ytaty4cbmhCQAAAAC8wa8RLzk5Wa+99ppef/11bdy4UbfddpsKCgrcq+wlJCR4LB5x2223af/+/Ro7dqy2bNmizz77TE8++aTuuOMOfx0CAAAAgNOAX7/jNHToUOXm5mrcuHHKzs5Wly5dNG/ePPeCERkZGR6Xz2JiYjR//nzdc8896tSpk5o2baqxY8fqgQce8NchAAAAADgN+H1xiKSkJCUlJZX72uLFi8uM9ezZU999952PqwIAAACA/+HbbgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgg+AEAAAAADYITgAAAABgIyCC09SpUxUXFyen06kePXpoxYoVFc6dNWuWLMvyeDidzpNYLQAAAIDTjd+D05w5c5ScnKzU1FStXLlSnTt3Vv/+/bV3794Kt6lfv76ysrLcj927d5/EigEAAACcboL9XcCkSZM0ZswYJSYmSpKmTZumzz77TDNmzNCDDz5Y7jaWZSk6OrpS719UVKSioiL387y8PEmSy+WSy+U6wepPnMvlkjEmIGqpieivb9Ff36K/vkV/fYv++lYg9dcYI4fDIclIxv/1eIUx/3uohhxTQDGyLCsgzuGq7N+vwam4uFjp6elKSUlxjzkcDvXr10/Lly+vcLuDBw8qNjZWLpdL5557rp588km1b9++3LkTJ07U+PHjy4zn5uaqsLDwxA/iBLlcLh04cOCYHzrwJvrrW/TXt+ivb9Ff36K/vhVI/S0sLFR8fLzCVKKgg/v9WovXGCNHYf6RP1uWf2upgcJUohYtWqiwsPC4d5mdDPn5+ZWe69fgtG/fPpWWlioqKspjPCoqSps2bSp3m9atW2vGjBnq1KmTDhw4oGeffVa9evXS+vXrddZZZ5WZn5KSouTkZPfzvLw8xcTEKCIiQvXr1/fuAVWDy+WSZVmKiIjw+w++moj++hb99S3661v017for28FUn8zMzOVnp6uwQpWeL1Gfq3Fa4yRJJXWa0Rw8oF8ZWjbtm1yOp2KjIz0ay1VWSvB77fqVVXPnj3Vs2dP9/NevXqpbdu2euWV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Lzo6WqGhoe7n27dv1/nnn6/Y2FideeaZ5Y4FBQUpOjpawcHBJ/24qiojI0OffvqpRo4c6R6bMWOG7r77bt11111avXq1li5dqn/84x86ePCg/wo9joyMDB0+fFgDBw5U48aNVadOnXLn/fvf/9bgwYPVu3dvff/991q7dq2uu+463XrrrbrvvvtOctX+NX78eE2ePFkTJkzQhg0btGjRIt188836/ffffbbP4uLiE36PkJAQXX/99XrhhRe8UBEAHMMAAMoYMWKEGTx4cJnxtLQ0I8m89tpr7jFJ5sMPP3T/+dhHampquWM7d+40ksyqVavc77Nu3TozcOBAExYWZurVq2fOP/98s23bNmOMMX369DFjx471qGXw4MFmxIgR7uexsbFm8uTJ7j8fu8/Y2Fizc+dOY1mW+eGHHzzeZ/Lkyebss882paWl5fbimWeeMd26dSuz75EjRx6ng5WvecKECWb48OGmbt265uyzzzYff/yx2bt3r7niiitM3bp1TceOHcvU/Ge7d+92zw8LCzPXXHONyc7ONsYYM3PmzDKfwc6dO8u8R0ZGhqlVq5ZJTk4u89oLL7xgJJnvvvvO/Z5nnHGGx5wPP/zQHP3fann7nDlzpjHGmN9++83cfPPNJjIy0oSGhpr27dub//f//p/7fd5//33Trl07ExISYmJjY82zzz7rsZ/q9mzJkiXm/PPPN06n05x11lnmzjvvNAcPHqywp507dzaPPvpoha8bY0xpaal5+umnTfPmzU1ISIiJiYkxjz/+uPv1tWvXmr59+xqn02kaNWpkxowZY/Lz892vH/3v7PHHHzeNGzc2cXFxxpgjn8U111xjzjjjDNOwYUNzxRVXeHxmixYtMuedd56pU6eOOeOMM0yvXr3Mrl273K9//fXXJiQkxBw6dOi49QNAVXDFCQCq4KKLLlLnzp31wQcflPt6VlaW2rdvr3vvvVdZWVm67777yh37s8zMTP31r39VaGioFi5cqPT0dN10000eV7aq4ocffpAkzZw5U1lZWfrhhx8UFxenfv36aebMmR5zZ86cqZEjR8rhKP9/CUuWLFG3bt08xqKjo/Xdd99p9+7d1arvWJMnT1bv3r21atUqDRw4UMOHD1dCQoJuvPFGrVy5Us2bN1dCQoKMMeVu73K5NHjwYO3fv19ff/21FixYoB07dmjo0KGSpKFDh+qrr76SJK1YsUJZWVmKiYkp8z7vv/++Dh8+XO7nc8stt6hevXp65513KnVMQ4cO1b333qv27dsrKytLWVlZGjp0qFwulwYMGKClS5fqzTff1IYNG/TUU08pKChIkpSenq5rr71W1113nX766Sc9+uijeuSRR8rcKljVnm3fvl2XXnqprrrqKq1du1Zz5szRt99+q6SkpAqPITo6WgsXLlRubm6Fc1JSUvTUU0/pkUce0YYNG/T2228rKipKklRQUKD+/furYcOG+uGHHzR37lx99dVXZfaZlpamzZs3a8GCBfr00091+PBh9e/fX2FhYVqyZImWLl2qevXq6dJLL1VxcbFKSko0ZMgQ9enTR2vXrtXy5ct18803y7Is93t269ZNJSUl+v777yv1eQFApfg7uQFAIKroipMxxgwdOtS0bdvW/VzHXHEy5si/1Kempnps8+exP19xSklJMc2aNTPFxcXl7rOqV5zKq8sYY+bMmWMaNmxoCgsLjTHGpKenG8uyyr0Cc2ztjz32mMfYnj17zF/+8hcjybRq1cqMGDHCzJkzx+OqVWVrvvHGG93Ps7KyjCTzyCOPuMeWL19uJJmsrKxy6/vyyy9NUFCQycjIcI+tX7/eSDIrVqwwxhizatWqCq80HXXrrbeWuYp0rE6dOpkBAwYYY+yvOBljTGpqquncubPHnPnz5xuHw2E2b95c7j6uv/56c8kll3iM3X///aZdu3bu59Xp2ahRo8zNN9/s8b5LliwxDofD/PHHH+XWsn79etO2bVvjcDhMx44dzS233GI+//xz9+t5eXkmNDTU4+rrsV599VXTsGFDj6tan332mXE4HO6rgSNGjDBRUVGmqKjIPWf27NmmdevWxuVyuceKiopM7dq1zfz5882vv/5qJJnFixeXu9+jGjZsaGbNmnXcOQBQFVxxAoAqMsZ4/Ou2N6xevVoXXHCBatWq5dX3/bMhQ4YoKChIH374oSRp1qxZ6tu3r+Li4irc5o8//pDT6fQYa9y4sZYvX66ffvpJY8eOVUlJiUaMGKFLL720zOIZdjp16uT+89GrFR07diwztnfv3nK337hxo2JiYjyuIrVr104NGjTQxo0bq1SLr61evVpnnXWWWrVqVe7rGzduVO/evT3Gevfura1bt6q0tNQ9VtWerVmzRrNmzVK9evXcj/79+8vlcmnnzp3l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",
      "text/plain": [
       "<Figure size 1000x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.figure(figsize=(10, 6))\n",
    "sns.histplot(df['difficulty'], color='skyblue', stat=\"probability\", bins=5)\n",
    "plt.title('Distribution of Difficulty Scores')\n",
    "plt.xlabel('Difficulty (Sum of Outcome Scores)')\n",
    "plt.ylabel('Frequency')\n",
    "plt.grid(alpha=0.3)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Now prepare the SFT dataset. For each row, we will create a new row with the following columns:\n",
    "# - index\n",
    "# - prompt\n",
    "# - response (str)\n",
    "\n",
    "# Use rejection sampling. Sample one of the correct responses. Each row right now has a \"reward_score\" column, which is a list of dicts. Each dict has a \"extra_info\", which is again a dict with a \"outcome_score\" key. We will sample one whose dicts with \"outcome_score\" == 1. We sample the decoded_response and the response.\n",
    "\n",
    "# We create a new df to store our SFT dataset.\n",
    "\n",
    "sft_df = list()\n",
    "\n",
    "# Iterate all rows\n",
    "for idx, row in df.iterrows():\n",
    "    # Iterate all dicts in \"reward_score\"\n",
    "    for i, d in enumerate(row[\"reward_score\"]):\n",
    "        # If \"outcome_score\" == 1\n",
    "        if d[\"extra_info\"][\"outcome_score\"] == 1:\n",
    "            sft_df.append({\n",
    "                \"index\": idx,\n",
    "                \"prompt\": row[\"prompt\"],\n",
    "                \"response\": row[\"decoded_responses\"][i],\n",
    "                \"reward_model\": row[\"reward_model\"],\n",
    "                \"difficulty\": row[\"difficulty\"]\n",
    "            })\n",
    "            break\n",
    "\n",
    "sft_df = pd.DataFrame(sft_df)\n",
    "            \n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "100\n"
     ]
    }
   ],
   "source": [
    "print(len(sft_df))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>prompt</th>\n",
       "      <th>response</th>\n",
       "      <th>reward_model</th>\n",
       "      <th>difficulty</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0</td>\n",
       "      <td>[{'content': 'You are a helpful assistant. The...</td>\n",
       "      <td>&lt;think&gt; To solve this, let's analyze each stat...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1</td>\n",
       "      <td>[{'content': 'You are a helpful assistant. The...</td>\n",
       "      <td>&lt;think&gt; To solve this, let's analyze each stat...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2</td>\n",
       "      <td>[{'content': 'You are a helpful assistant. The...</td>\n",
       "      <td>&lt;think&gt; To solve this, let's analyze each stat...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>3</td>\n",
       "      <td>[{'content': 'You are a helpful assistant. The...</td>\n",
       "      <td>&lt;think&gt; To solve this, let's analyze each stat...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>4</td>\n",
       "      <td>[{'content': 'You are a helpful assistant. The...</td>\n",
       "      <td>&lt;think&gt; To solve this, let's analyze each stat...</td>\n",
       "      <td>{'ground_truth': {'solution_text_format': '(1)...</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   index                                             prompt  \\\n",
       "0      0  [{'content': 'You are a helpful assistant. The...   \n",
       "1      1  [{'content': 'You are a helpful assistant. The...   \n",
       "2      2  [{'content': 'You are a helpful assistant. The...   \n",
       "3      3  [{'content': 'You are a helpful assistant. The...   \n",
       "4      4  [{'content': 'You are a helpful assistant. The...   \n",
       "\n",
       "                                            response  \\\n",
       "0  <think> To solve this, let's analyze each stat...   \n",
       "1  <think> To solve this, let's analyze each stat...   \n",
       "2  <think> To solve this, let's analyze each stat...   \n",
       "3  <think> To solve this, let's analyze each stat...   \n",
       "4  <think> To solve this, let's analyze each stat...   \n",
       "\n",
       "                                        reward_model  difficulty  \n",
       "0  {'ground_truth': {'solution_text_format': '(1)...           5  \n",
       "1  {'ground_truth': {'solution_text_format': '(1)...           5  \n",
       "2  {'ground_truth': {'solution_text_format': '(1)...           5  \n",
       "3  {'ground_truth': {'solution_text_format': '(1)...           5  \n",
       "4  {'ground_truth': {'solution_text_format': '(1)...           5  "
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "display(sft_df.head())"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0      0\n",
      "1      1\n",
      "2      2\n",
      "3      3\n",
      "4      4\n",
      "      ..\n",
      "95    95\n",
      "96    96\n",
      "97    97\n",
      "98    98\n",
      "99    99\n",
      "Name: index, Length: 100, dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(sft_df[\"index\"])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Let's see what is the index of the question that doesn't have a correct answer\n",
    "for idx in df.index:\n",
    "    if idx not in sft_df[\"index\"].values:\n",
    "        print(idx)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'A very special island is inhabited only by knights and knaves. Knights always tell the truth, and knaves always lie. You meet 5 inhabitants: Aiden, William, Evelyn, Jackson, and Ava. \"If William is a knave then Evelyn is a knight\" - Aiden. William remarked, \"Aiden is a knight and Ava is a knight\". As Evelyn put it, \"Ava is a knave and Aiden is a knave\". Jackson commented, \"Evelyn is not a knight\". According to Ava, \"William is a knave\". So who is a knight and who is a knave?'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "'(1) Aiden is a knave\\n(2) William is a knave\\n(3) Evelyn is a knave\\n(4) Jackson is a knight\\n(5) Ava is a knight'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    },
    {
     "data": {
      "text/plain": [
       "'<think> To solve this, let\\'s analyze each statement step by step, considering the implications based on whether the speakers are knights (who always tell the truth) or knaves (who always lie).\\n\\n1. Aiden says: \"If William is a knave then Evelyn is a knight.\"\\n2. William says: \"Aiden is a knight and Ava is a knight.\"\\n3. Evelyn says: \"Ava is a knave and Aiden is a knave.\"\\n4. Jackson says: \"Evelyn is not a knight.\"\\n5. Ava says: \"William is a knave.\"\\n\\nLet\\'s start by assuming William is a knight. If William is a knight, then his statement \"Aiden is a knight and Ava is a knight\" must be true. This means Aiden and Ava are both knights.\\n\\nIf Aiden is a knight, then his statement \"If William is a knave then Evelyn is a knight\" must be true. Since William is a knight, the condition \"William is a knave\" is false, making the whole statement true, which is consistent with Aiden being a knight.\\n\\nIf Ava is a knight, then her statement \"William is a knave\" must be true. However, we have already assumed that William is a knight, which means Ava\\'s statement is false, contradicting the assumption that Ava is a knight. Therefore, our initial assumption that William is a knight must be incorrect.\\n\\nNow, let\\'s assume William is a knave. If William is a knave, then his statement \"Aiden is a knight and Ava is a knight\" is false. This means either Aiden is not a knight or Ava is not a knight (or both).\\n\\nLet\\'s explore the case where Aiden is a knight. If Aiden is a knight, then his statement \"If William is a knave then Evelyn is a knight\" must be true. Since William is a knave, for Aiden\\'s statement to be true, Evelyn must be a knight.\\n\\nIf Evelyn is a knight, then her statement \"Ava is a knave and Aiden is a knave\" must be true. However, we have already assumed that Aiden is a knight, which means Evelyn\\'s statement is false, contradicting the assumption that Evelyn is a knight. Therefore, Aiden cannot be a knight if William is a knave.\\n\\nNow, let\\'s assume Aiden is a knave. If Aiden is a knave, then his statement \"If William is a knave then Evelyn is a knight\" is false. For the statement to be false, it must be that William is a knave and Evelyn is not a knight.\\n\\nWe already assumed that William is a knave, so we need to check the condition for Evelyn. If Evelyn is a knave, then her statement \"Ava is a knave and Aiden is a knave\" is false. This means either Ava is not a knave or Aiden is not a knave (or both).\\n\\nSince we already know that Aiden is a knave, we need to check the statement of Ava. Ava says \"William is a knave.\" Since William is a knave, Ava\\'s statement is true, which means Ava must be a knight.\\n\\nNow, let\\'s check Jackson\\'s statement. Jackson says \"Evelyn is not a knight.\" Since we have assumed that Evelyn is a knave, Jackson\\'s statement is true, which means Jackson must be a knight.\\n\\nFinally, let\\'s check Evelyn\\'s statement again. Evelyn says \"Ava is a knave and Aiden is a knave.\" Since Ava is a knight and Aiden is a knave, Evelyn\\'s statement is false, which means Evelyn must be a knave, which is consistent with our previous assumption.\\n\\nSo, we have:\\n- William is a knave\\n- Aiden is a knave\\n- Ava is a knight\\n- Jackson is a knight\\n- Evelyn is a knave\\n\\nLet\\'s check the statement of Jackson again: \"Evelyn is not a knight.\" Since Evelyn is a knave, Jackson\\'s statement is true, which is consistent.\\n\\nAnd let\\'s check the statement of Aiden: \"If William is a knave then Evelyn is a knight.\" Since William is a knave and Evelyn is a knave, Aiden\\'s statement is false, which means Aiden is a knave, which is consistent.\\n\\nAnd let\\'s check the statement of Evelyn: \"Ava is a knave and Aiden is a knave.\" Since Ava is a knight and Aiden is a knave, Evelyn\\'s statement is false, which means Evelyn is a knave, which is consistent.\\n\\nAnd let\\'s check the statement of Ava: \"William is a knave.\" Since William is a knave, Ava\\'s statement is true, which means Ava is a knight, which is consistent.\\n\\nAnd let\\'s check the statement of William: \"Aiden is a knight and Ava is a knight.\" Since Aiden is a knave and Ava is a knight, William\\'s statement is false, which means William is a knave, which is consistent.\\n\\nSo, the consistent identities are:\\n- William is a knave\\n- Aiden is a knave\\n- Ava is a knight\\n- Jackson is a knight\\n- Evelyn is a knave\\n\\n</think>\\n<answer> (1) William is a knave\\n(2) Aiden is a knave\\n(3) Ava is a knight\\n(4) Jackson is a knight\\n(5) Evelyn is a knave </answer><|im_end|>'"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Let's look at that question\n",
    "display(df.loc[2, \"prompt\"][1][\"content\"])\n",
    "display(df.loc[2, \"reward_model\"][\"ground_truth\"][\"solution_text_format\"])\n",
    "display(df.loc[2, \"decoded_responses\"][0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {},
   "outputs": [],
   "source": [
    "#  Save the SFT dataset to parquet\n",
    "sft_file_path = \"../dataset_distilled_from_7b/kk/instruct/5ppl/sft.parquet\"\n",
    "# sft_file_path = \"../dataset_distilled_from_7b/kk/instruct/5ppl/sft_val.parquet\"\n",
    "sft_df.to_parquet(sft_file_path, engine=\"pyarrow\")"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "base",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.9"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
